home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d897.lha / EPP / PModules / eTimer.e < prev    next >
Text File  |  1993-06-26  |  4KB  |  127 lines

  1. OPT TURBO
  2.  
  3. MODULE 'dos/dos'
  4. PMODULE 'PMODULES:stack'
  5.  
  6.  
  7. OBJECT et_procInfoType
  8.   visits : LONG
  9.   started : datestamp
  10.   elapsed : datestamp
  11.   name : LONG
  12. ENDOBJECT
  13.  
  14.  
  15. DEF et_procInfoArray : PTR TO et_procInfoType,
  16.     et_stack : st_stackType,
  17.     et_numberOfProcs = 0,
  18.     et_idRunning = -1 /* Used to turn timer off/on  */
  19.                       /* in case of recursive call. */
  20.                       /* Used by et_StartTime AND   */
  21.                       /* et_StopTime.               */
  22.  
  23.  
  24. PROC et_init (numberOfProcs)
  25.   DEF i, elapsed : PTR TO datestamp
  26.   et_numberOfProcs := numberOfProcs + 1
  27.   et_procInfoArray := New ((SIZEOF et_procInfoType) * et_numberOfProcs)
  28.   FOR i := 0 TO numberOfProcs
  29.     et_procInfoArray [i].visits := 0
  30.     elapsed := et_procInfoArray [i].elapsed
  31.     elapsed.minute := 0
  32.     elapsed.tick := 0
  33.   ENDFOR
  34.   st_init (et_stack)
  35. ENDPROC
  36.  
  37.  
  38. PROC et_startTimer (id, name)
  39.   DEF current : datestamp,
  40.       started : PTR TO datestamp,
  41.       elapsed : PTR TO datestamp
  42.   VOID DateStamp (current)
  43.  
  44.   /* Update the elapsed time of the proc that relinquished control to     */
  45.   /* child.  Init if et_idRunning = -1 (PROC main () is the *only* case.) */
  46.   IF et_idRunning = -1
  47.     et_init (id)
  48.   ELSE
  49.     started := et_procInfoArray [et_idRunning].started
  50.     elapsed := et_procInfoArray [et_idRunning].elapsed
  51.     IF current.tick < started.tick
  52.       current.tick := current.tick + 3000
  53.       current.minute := current.minute - 1
  54.     ENDIF
  55.     elapsed.tick := elapsed.tick + (current.tick - started.tick)
  56.     elapsed.minute := elapsed.minute + (current.minute - started.minute)
  57.   ENDIF
  58.   st_push (et_stack, et_idRunning)
  59.  
  60.   /* Update the start time of the child proc. */
  61.   started := et_procInfoArray [id].started
  62.   started.minute := current.minute
  63.   started.tick := current.tick
  64.   et_procInfoArray [id].name := IF name = NIL THEN '' ELSE name
  65.   et_idRunning := id
  66.   et_procInfoArray [id].visits := et_procInfoArray [id].visits + 1
  67. ENDPROC
  68.  
  69.  
  70. PROC et_toMinutes (ticks) RETURN ticks / 3000
  71.  
  72.  
  73. PROC et_report ()
  74.   DEF i,
  75.       totalMinute = 0,
  76.       totalTick = 0,
  77.       ds : PTR TO datestamp
  78.   FOR i := 0 TO (et_numberOfProcs - 1)
  79.     ds := et_procInfoArray [i].elapsed
  80.     ds.minute := ds.minute + et_toMinutes (ds.tick)
  81.     ds.tick := ds.tick - (et_toMinutes (ds.tick) * 3000)
  82.     WriteF ('\nid=\d, visits=\d, minute=\d, tick=\d, name=\s',
  83.             i,
  84.             et_procInfoArray [i].visits,
  85.             ds.minute,
  86.             ds.tick,
  87.             et_procInfoArray [i].name)
  88.     totalMinute := totalMinute + ds.minute
  89.     totalTick := totalTick + ds.tick
  90.   ENDFOR
  91.   totalMinute := totalMinute + et_toMinutes (totalTick)
  92.   totalTick := totalTick - (et_toMinutes (totalTick) * 3000)
  93.   WriteF ('\ntotalMinute=\d totalTick=\d\n', totalMinute, totalTick)
  94. ENDPROC
  95.  
  96.  
  97. PROC et_stopTimer ()
  98.   DEF current : datestamp,
  99.       started : PTR TO datestamp,
  100.       elapsed : PTR TO datestamp
  101.   VOID DateStamp (current)
  102.  
  103.   /* Update the elapsed time of the child proc that id returning control */
  104.   /* to the parent.  None if et_idRunning = -1 (PROC main () is the      */
  105.   /* *only* case.)                                                       */
  106.   started := et_procInfoArray [et_idRunning].started
  107.   elapsed := et_procInfoArray [et_idRunning].elapsed
  108.     IF current.tick < started.tick
  109.       current.tick := current.tick + (50 * 60)
  110.       current.minute := current.minute - 1
  111.     ENDIF
  112.   elapsed.tick := elapsed.tick + (current.tick - started.tick)
  113.   elapsed.minute := elapsed.minute + (current.minute - started.minute)
  114.  
  115.   /* Update the start time of the parent proc.  None if et_idRunning = -1 */
  116.   /* (PROC main () is the *only* case.)                                   */
  117.   et_idRunning := st_pop (et_stack)
  118.   IF et_idRunning > -1
  119.     started := et_procInfoArray [et_idRunning].started
  120.     started.minute := current.minute
  121.     started.tick := current.tick
  122.   ELSE
  123.     et_report ()
  124.   ENDIF
  125. ENDPROC
  126.  
  127.